/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package webservices;

import BaseDatos.BaseDatos;
import BaseDatos.Validadores;
import Objetos.Telefono;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Random;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

/**
 *
 * @author usuario
 */
@WebService(serviceName = "Admin",
            targetNamespace = "http://digamaracay3.dynalias.com:8080/WSS/Admin")
public class Admin {
    private final String target = "http://digamaracay3.dynalias.com:8080/WSS/Admin";
    private static int randomcode;
    /**
     * Genera codigo aleatorio de 5 cifras si que no exista en BD.
     * No recibe parametros y cunado es llamado retorna un codigo 
     * aleatorio de 5 cifras que a su vez no este registrado en la BD
     * @return Variable tipo Integer de cinco cifras.
     */
    private int getNewCodTel() throws SQLException {
        boolean match=true;
        Connection conn = null;
        try{
            while (match){
                Random code=new Random();
                randomcode = code.nextInt(99999);
                if(randomcode >=10000){
                    conn = BaseDatos.getConexionDiga();
                    String buscar = "SELECT codigo FROM Diga.Telefono WHERE codigo = "+randomcode;
                    PreparedStatement ps = conn.prepareStatement(buscar);
                    ResultSet rs = ps.executeQuery();
                    System.out.println("Buscando en Base de Datos...");
                    if (!rs.next()){
                        System.out.println("Numero nuevo agregado: "+ randomcode);
                        break;
                    }
                    conn.close();
                    ps.close();
                    System.out.println("Conexion cerrada "+conn);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("Admin.getNewCodTel = " + e);
        }finally{
            conn.close();
            return randomcode;
        }
        
    }
    /**
     * Registra un nuevo telefono para un determinado usuario en la BD.
     * Recibe un objeto tipo Telefono y dos variables tipo cadena que corresponden
     * a usuario y contraseña, busca en BD que ese usuario no tenga un telefono registado, si no,
     * registra en BD los parametros del objeto Telefono entrante.
     * @param _user variable tipo cadena, no puede ser null ni conjunto de espacios.
     * @param _pswd variable tipo contraseña, no puede ser null ni conjunto de espacios.
     * @param _telf Objeto tipo Telefono, debe tener llenos los parametros: telefono, numero, pin, so.
     * @return  devuelve variable tipo Integer, donde cada valor representa los posibles resultados del metodo
     */
    @WebMethod(operationName = "registrarTelf")
    public Integer registrarTelf(@WebParam(name = "user",
                                        targetNamespace = "http://digamaracay3.dynalias.com:8080/WSS/Admin") String _user,
                                 @WebParam(name = "pswd",
                                        targetNamespace = "http://digamaracay3.dynalias.com:8080/WSS/Admin") String _pswd,
                                 @WebParam(name = "telf",
                                        targetNamespace = "http://digamaracay3.dynalias.com:8080/WSS/Admin") Telefono _telf){
        //TODO write your implementation code here:
        System.out.println("user = " + _user);
        System.out.println("pswd = " + _pswd);
        System.out.println("telf = " + _telf.toString());
        try{
            int iduser = Validadores.validarUsuario(_user, _pswd);
            if (iduser > 0){
                String sql1 = "SELECT e.fk_idEmpleado as idEmpleado FROM Diga.Usuario e WHERE usuario LIKE BINARY '"+_user+"';";
                System.out.println("sql1 = " + sql1);
                String sql2 = "SELECT m.idMarca FROM Diga.MarcasBlackberry m WHERE m.nombre LIKE '"+_telf.getModelo()+"';";
                System.out.println("sql2 = " + sql2);
                String sql3 = "SELECT numero FROM Diga.Telefono WHERE numero LIKE BINARY '"+_telf.getNum()+"';";
                System.out.println("sql3 = " + sql3);
                int idempleado = 0;
                int idmarca    = 0;

                Connection conn = BaseDatos.getConexionDiga();
                PreparedStatement ps = conn.prepareStatement(sql1);
                ResultSet res1 = ps.executeQuery();
                if(res1.next()){
                    idempleado = res1.getInt("idEmpleado");                
                }else{
                    return -2;
                }
                ps.close();
                conn.close();
                //*************************
                conn = BaseDatos.getConexionDiga();
                ps = conn.prepareStatement(sql2);
                ResultSet res2 = ps.executeQuery();
                if(res2.next()){
                    idmarca = res2.getInt("idMarca");
                }
                ps.close();
                conn.close();
                //*************************
                conn = BaseDatos.getConexionDiga();
                ps = conn.prepareStatement(sql3);
                ResultSet res3 = ps.executeQuery();
                if(res3.next()){
                    return -3;  
                }
                ps.close();
                conn.close();
                //*************************
                if(idempleado >0){
                    int newcodtel = this.getNewCodTel();
                    String insert = "INSERT INTO Diga.Telefono(tipo,numero,codigo,pin,so,fk_idEmpleado";
                    String values = "VALUES('M','"+_telf.getNum()+"',"+newcodtel
                                            + ",'"+_telf.getPin()+"','"+_telf.getSo()+"'"
                                            + ","+idempleado;
                    if(idmarca!=0){
                        insert += ",fk_idMarca";
                        values += ","+idmarca; 
                    }
                    insert += ") ";
                    values  += ");";
                    conn = BaseDatos.getConexionDiga();
                    ps = conn.prepareStatement(insert+values);
                    int result = ps.executeUpdate();
                    //System.out.println("result = " + result);
                    if(result >0){
                        System.out.println("newcodtel = " + newcodtel);
                        return newcodtel;
                    }
                }
            }else{
                //System.out.println("Usuario o Contraseña Invalido ");
                return -2;
        }
        }catch(Exception e){
            //System.out.println("Admin.registrarTelf = " + e);
        }
        return -1;
    }
    /**
     * Elimina un registro de telefono en BD.
     * Recibe una variable tipo Integer, busca este codigo en BD
     * Si lo consigue elimina el registro.
     * @param _cod Variable tipo Integer distinta a 0.
     * @return variable tipo Integer, si elimina el registro retorna 1, si no, retorna 0.
     */
     @WebMethod(operationName = "eliminarTelf")
    public Integer eliminarTelf(@WebParam(name = "cod",
                                        targetNamespace = "http://digamaracay3.dynalias.com:8080/WSS/Admin") int _cod){
        //TODO write your implementation code here:
        System.out.println("cod = " + _cod);
        try{
            String sql1 = "DELETE FROM Diga.Telefono WHERE codigo = "+_cod+";";
                        
            Connection conn = BaseDatos.getConexionDiga();
            PreparedStatement ps = conn.prepareStatement(sql1);
            boolean res1 = ps.execute();
            ps.close();
            conn.close();
            if(res1){
                return 1;            
            }else{
                return 0;
            }
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("Admin.registrarTelf = " + e);
        }
        return -1;
    }
}
